1.4 Visualizing Dart's Abstract Syntax Tree:An Exploration with AST Viewer 中文版

1.4 Visualizing Dart's Abstract Syntax Tree:An Exploration with AST Viewer》中文版初稿。我在尝试英文写作,后续将维护英文版。

Dart 的抽象语法树长啥样呢?

我在浏览 Dart SDK 源码时,意外发现 SDK 自带了一个 AST Viewer,是一个使用 Dart 开发的 TUI 命令行应用,很有趣。

位于 \front_end\tool\parser_direct_ast\viewer.dart

对于下面的 Dart 代码:

int add(int a, int b) {
	return a + b;
}

使用 AST Viewer 来查看,截图如下。首先语法树的根节点是一个 CompilationUnit。

Pasted image 20231108114904.png

这是一个交互式程序,回车进入 CompilationUnit 的子节点:

Pasted image 20231108115012.png

其中,CompilationUnit 内部有两个元素,MetadataStar 和 TopLevelDeclaration(顶层声明)。将蓝条移动到 TopLevelDeclaration,点击回车,进入其内部:

Pasted image 20231108115159.png

内部是一个 TopLevelMethod 顶层方法,再次进入其内部:

Pasted image 20231108115254.png

我一眼看到了 "add",看起来这是我们的方法签名。进入 BlockFunctionBody 方法体:

Pasted image 20231108115354.png

是一条 return 语句,进入:

Pasted image 20231108115428.png

最终来到了 a + b 的逻辑。

从这层层递进的关系中,我们能够感受到抽象语法树的“树”的含义。仅仅一个 a + b 的语法树就这么多,想到我们实际工程通常有数万行 Dart 代码,这棵树得多大啊!

另一个感触是语法树节点类型非常多样化,CompilationUnit、MetadataStar、TopLevelDeclaration、BlockFunctionBody……这部分后续放在《Dart AST》专题中进行梳理。

使用 AST viewer.dart 查看语法树是不是很直观?值得一提的是,它的代码实现也很有趣,它内置了一个 TUI 框架,采用组件化编程,编程风格跟 Flutter 非常像!注:后续可酝酿一篇《使用 Dart 开发响应式 TUI 程序》。


本文作者:Maeiee

本文链接:1.4 Visualizing Dart's Abstract Syntax Tree:An Exploration with AST Viewer 中文版

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!